import { _decorator, Component, Label, Node, tween, Vec3 } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('gameOver')
export class gameOver extends Component {

    @property(Label)
    bestScore: Label = null;
    @property(Label)
    score: Label = null;
    @property(Node)
    content: Node = null;

    //这是一个数组, 用于存储所有注册的回调函数，比如controller的restart函数 
    onRestartListener: Function[] = [];

    // 整个面板内容的父节点
    // 用于动画, 从下往上弹出
    // 有一个遮挡层, 避免点击穿透, 这个层是content的兄弟节点,是不能动的.

    /**
     * 用于创建预制体后调用
     * @param score 
     * @param bestScore 
     */
    init(score: number, bestScore: number) {
        console.log("游戏结束预制体", score, bestScore);
        this.score.string = score.toString();
        this.bestScore.string = bestScore.toString();
        //用于动画, 从下往上弹出
        this.content.setPosition(new Vec3(0, -2000, 0));
        tween(this.content)
            .delay(0.7)
            .to(0.5, { position: new Vec3(0, 0, 0) }).start()
    }

    /**
     * 用户点击重新开始,触发回调
     */
    again() {
        //当用户点击重新开始时,就会调用保存在onRestartListener[]里的restart方法
        this.onRestartListener.forEach(callback => {
            callback();
        })
        //先把画面放下去，再销毁
        tween(this.content).to(0.3, { position: new Vec3(0, -2000, 0) })
            .delay(0.2)
            .call(() => {
                this.node.destroy();
            })
            .start();
    }

    /**
     * 可以再创建gameover预制体后把controller的restart函数添加到此次
     * @param callback 
     */
    addRestartListener(callback: Function) {
        this.onRestartListener.push(callback);
    }
}


